﻿#ifndef __RESMANAGER_H__
#define __RESMANAGER_H__
#include "container/ssAsciiDictionary.h"
#include "container/ssList.h"
#include "../ss3dErrorDefine.h"
#include "ssSingleton.h"
#include "ssBinaryFile.h"
#include "ssMesh.h"
#include "ssTextureSpirit2d.h"


namespace StarSeeker
{

class ssResManager
{
public:
	ssResManager();
	~ssResManager();

	//加载文件
	ssError LoadFile(const char* uri);
	//加载模型
	ssError LoadMesh(const char* uri);
	ssError CreateMesh(ssMesh* mesh);
	//加载纹理
	ssError LoadPicture(const char* uri);
	//创建空纹理
	ssError CreateTexture2d(const char* uri, i32 width, i32 height);

	//引用资源
	ssIRes* QuoteRes(const char* hash);
	ssIRes* QuoteResByUri(const char* uri);
	//回收资源
	bool RecoverRes(const char* hash);
	bool RecoverResByUri(const char* uri);
	bool RecoverRes(ssIRes* res);
	//释放所有资源
	void Clear();
	//释放所有引用为0的资源
	void ReleaseZero();

	//查找资源（引用计数不会变）
	const ssIRes* FindRes(const char* hash);
	const ssIRes* FindResByUri(const char* uri);

	//创建默认模型
	void CreateDefaultMesh();
private:
	ssAsciiDictionary<ssIRes>	m_mapRes;
};

#define SS_RES_MANAGR StarSeeker::ssSingle<StarSeeker::ssResManager>::instance()

}
#endif
